package main

import (
	"fmt"
)
// 我的 想法是通过找到中间的那个，然后对称即可；
// 不适合在 偶数个回文数的方法来实现；
//
//func longestPalindrome(s string) string {
//	length:=0
//	sit:=0
//	for i,_ := range s{
//		palindrome:=string(s[i])
//		// 找到以i为中心的;
//		// 开始找到回文子串
//		for j:=i+1;j<len(s);j++{
//			if i-(j-i) > -1{
//				if s[j] == s[i-(j-i)] { // bool 没有 0 这种bool 逻辑结果 ,两个byte 比较
//					palindrome += string(s[j])
//				}else{
//					break
//				}
//			}else{
//				break
//			}
//		}
//		//是否是最长的回文子串
//		if len(palindrome) > length {
//			sit=i
//			length=len(palindrome)
//		}
//	}
//	// 根据回文字符的位置和长度；找到字串
//	return s[sit-length+1:sit+length] // 不包含 sit+length 这个位置的
//}


/* 新的方案的思路/分步骤完成
1. 遍历 找到子串，
2. 判断子串是否是回文字符串,（这个需要根据子串（奇数子串和偶数子串）来做出比较的即可）
   算法题目的关键就是，将整个算法分成一步一步来完成即可；
*/

func longestPalindrome(s string) string {
	length:=1
	res:=string(s[0])
	// 找到子字符串
	for i:=0;i<len(s);i++ {
		for j:=i+1;j<=len(s);j++ {
			subString:= s[i:j]
			if determinePalindrome(subString) {
				if length < len(subString){
					length = len(subString)
					res=subString
				}
			}
		}
	}
	return res
}
// 判断字符串，回文字符可以中间判断，也可以从头部开始判断
func determinePalindrome(s string) bool {
	res := true
	for i:=0; i < len(s)/2; i++{
		if s[i] != s[len(s)-1-i]{
			res=false
			break
		}
	}
	return res
}

func main(){
	s:="cbbd"
	fmt.Println(longestPalindrome(s))
}


// 题目 类型 ：字符串
// 给定一个字符串 s，找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。